package com.youlu.campus.service.base;

import java.util.concurrent.TimeUnit;

public interface LockService {

    // 单个锁有效期
    public static final int DEFAULT_EXPIRE_TIME = 30;

    /**
     * 锁在给定的等待时间内空闲，则获取锁成功 返回true， 否则返回false
     *
     * @param key
     * @param timeout
     * @param unit
     * @return
     */
    boolean tryLock(String key, long timeout, TimeUnit unit);

    /**
     * 锁在给定的等待时间内空闲，则获取锁成功,锁保留时间 返回true， 否则返回false
     *
     * @param key
     * @param waitTime
     * @param leaseTime 保留时间
     * @param unit
     * @return
     */
    boolean tryLock(String key, long waitTime, long leaseTime, TimeUnit unit);

    /**
     * 如果锁空闲立即返回 获取失败 一直等待
     *
     * @param key
     */
    void lock(String key);

    /**
     * 释放锁
     *
     * @param key
     */
    void unLock(String key);

}
